<?php
/**
 * @version	        1.0
 * @package		Joomla
 */

// Check to ensure this file is within the rest of the framework
defined('JPATH_BASE') or die();

jimport( 'joomla.html.parameter');

/**
 * Obiekt utrzymuje zmienne przesłane z formularzy (dowolna ich ilość) dla jednej sesji.  
 *
 * @package 	Joomla
 * @subpackage	przeniesienie
 * @since	1.0
 */
class msPrzeniesienie_add extends msObject
{
	/**
	 * Tablica asocjacyjna zawierająca dane przesłane z formularzy dla całej sesji 
	 * @var	Array
	 */
	var	$vars	= array();
		
	/**
	 * Połaczenie do BD
	 * @var source		
	 */	
	var 	$db;
	
	
	/**
	 * Konstruktor obiektu
	 * Budujac obiekt otzymujemy dostep do zmienych otrzymanych z formularzy dla całej sesji.
	 * np. $oP =& new msPrzeniesienie_add( );
	 *     $tablica_dane_z_formularzy =  $oP->toArray();
	 */
	function __construct( $clear=0 )
	{
		$this->db =& JFactory::getDBO();
		
		$post	  = (array) JRequest::get('post');
		$session  =& JFactory::getSession();
		$registry =& $session->get('registry');
		$registry->loadArray($post, 'przeniesienie');
		$this->vars = $registry->toArray('przeniesienie');
	}
	
	/**
	 *
	 * @return	Array 	Zwraca tablice asocjacyjną zawierająca 
	 *                      dane przesłane z formularzy dla całej sesji 
	 */
	function toArray()
	{
		return $this->vars;
	}

	
	/**
	 * Get a registry value
	 *
	 * @param	string	$regpath	Nazwa zmiennej do pobrania z rejestru 
	 * @param	mixed	$default	Optional default value
	 * @return	mixed	Wartość zmiennej
	 */
	function getValue($regpath, $default=null)
	{	
		$resultat = $default;
		if (isset($this->vars[$regpath])) {
			$resultat = $this->vars[$regpath];
		}
		return $resultat;
	}
	
	/**
	 * Set a registry value
	 *
	 * @param	string	$regpath 	Nazwa zmiennej do zapisu w rejestrze
	 * @param 	mixed	$value		Wartość zmiennej
	 */
	function setValue($regpath, $value)
	{
		$session =& JFactory::getSession();
		$registry =& $session->get('registry');
		$registry->setValue('przeniesienie.'.$regpath, $value);
		$this->vars[$regpath] = $value;
	}	
	
	/**
	 * Pobierz spółkę zarządzajacą obiektem
	 *
	 * @param 	int	$gid	Wspólny identyfikator dla tabel "jos_obiekty", "jos_obiekty_k", "jos_obiekty_r" i "jos_obiekty_s"		
	 * @return 	string	Nazwa spółki
	 */
	function getSpolka( $gid )
	{	
		$query = 'SELECT s.spolka
			  FROM #__obiekty_s AS a, #__spolka AS s
			  WHERE a.spolka = s.id
			  AND a.gid = '.$gid
			  .' AND a.registerDate = (SELECT max(registerDate) 
		                                   FROM #__obiekty_s
		                                   WHERE gid = a.gid)';
		$this->db->setQuery( $query );
		return $this->db->loadResult();
	}
	
	/**
	 * Pobierz kierownika obiektu
	 *
	 * @param 	int	$gid	Wspólny identyfikator dla tabel "jos_obiekty", "jos_obiekty_k", "jos_obiekty_r" i "jos_obiekty_s"	
	 * @return 	string	Nazwa kierownika obiektu
	 */
	function getKierownik_obiektu( $gid )
	{	
		$query = 'SELECT u.name, u.email, u.username
			  FROM #__obiekty_k AS a, #__users AS u 
			  WHERE a.users = u.pesel
			  AND a.gid = '.$gid
			  .' AND a.registerDate = (SELECT max(registerDate) 
		                                   FROM #__obiekty_k
		                                   WHERE gid = a.gid)
		            AND u.registerDate = (SELECT max(registerDate) 
		                                   FROM #__users
		                                   WHERE pesel = u.pesel)'
		;
		$this->db->setQuery( $query );
		return $this->db->loadAssoc();
	}
	
	/**
	 * Pobierz kierownika regionu
	 *
	 * @param 	int	$gid	Wspólny identyfikator dla tabel "jos_obiekty", "jos_obiekty_k", "jos_obiekty_r" i "jos_obiekty_s"		
	 * @return 	string	Nazwa kierownika regionu
	 */
	function getKierownik_reg( $gid )
	{	
		$query = 'SELECT u.name, u.email, u.username
			  FROM #__obiekty_r AS a, #__regiony AS r, #__users AS u 
			  WHERE a.regiony = r.gid
			  AND r.users = u.pesel
			  AND a.gid = '.$gid
			  .' AND a.registerDate = (SELECT max(registerDate) 
		                                   FROM #__obiekty_r
		                                   WHERE gid = a.gid)
		            AND r.registerDate = (SELECT max(registerDate) 
		                                   FROM #__regiony
		                                   WHERE gid = r.gid)
		            AND u.registerDate = (SELECT max(registerDate) 
		                                  FROM #__users
		                                  WHERE pesel = u.pesel)'
		;		 
		$this->db->setQuery( $query );
		$arr = $this->db->loadAssoc();
		
		if ( empty($arr )) {
			$arr = $this->getKierownik_obiektu( $gid );
		}
		
		return $arr;	
	}
	
	/**
	 * Pobierz status przeniesienia dla danej maszyny
	 *
	 * @param 	int	$nri	Nr inwentarzowy maszyny		
	 * @return 	mixed	Status przeniesienia
	 */
	function getStatusPrzeniesienia( $nri )
	{	
		 // Złączenie tabel "jos_Przeniesienie" i "jos_Przeniesienie_status" po gid
		$query = ' SELECT s.status 
			   FROM jos_przeniesienia AS a, jos_przeniesienia_status AS s 
			   WHERE s.gid = a.gid 
			   AND s.registerDate = (SELECT max(registerDate) 
		                                 FROM #__przeniesienia_status
		                                 WHERE gid = s.gid)
		           AND a.nri = '.$this->db->Quote( $nri )   // Szukana maszyna - może być kilka rekordów, gdyż maszyna mogła już być wcześniej przenoszona.
		        .' AND (s.status = 0 OR s.status = 1)'      // Szukamy tylko maszyn o nie zakończonym statusie przeniesienia (2 - status zakończony)
		;
		$this->db->setQuery($query) ;
		return  $this->db->loadResult( );
	}
	
	/**
	 * Pobierz liczbe przeniesień
	 *
	 * @param 	mixed	$czesc_nr_przeniesienia		Część numeru przeniesienia	
	 * @return 	int	Liczba przeniesień
	 */
	function getLiczbaPrzeniesien( $czesc_nr_przeniesienia )
	{	
		$searchEscaped = $this->db->Quote( '%'.$this->db->getEscaped( $czesc_nr_przeniesienia, true ), false );
		$query = ' SELECT count(nr_przeniesienia)
			   FROM jos_przeniesienia
			   WHERE nr_przeniesienia LIKE '.$searchEscaped
		;           
		$this->db->setQuery($query) ;
		return  (int) $this->db->loadResult( );
	}

	
	/**
	 * Metoda zapisuje rekordy do poszczególnych tabel BD.
	 *
	 * @access 	public
	 * @return 	boolean	true on success
	 * @since 1.0
	 */
	function save( )
	{
		/* 
		 * Przeniesienie
		 */
		// Utworz obiekt tablicy
		$table_przenies =& $this->getTable('Przeniesienie');
		// Pobiez z ob. przeniesienia_add wlasciwosci do ob. tablicy
		$table_przenies->bind( $this->getProperties() );				
		
		// Ustawienie identyfikatora grupy. 
		// Jeśli nowy obiekt to zostanie stworzony nowy nr $gid.	
		$table_przenies->gid = $this->setGid( $table_przenies->_tbl );
				
		/* 
		 * Ustalenie numeru przeniesienia
		 */
		$skrot_sp = msMysql::getloadResult('skrot', 'jos_spolka', 'spolka', $table_przenies->z_obiektu_sp, 'xxx', false, false);
		$biezacyRok = date("Y");
		$ilosc_rok = $this->getLiczbaPrzeniesien( $biezacyRok );
		$ilosc_spoka = $this->getLiczbaPrzeniesien( $skrot_sp.'/'.$biezacyRok );
		// Czy zmienił się rok
		if ($ilosc_rok !== 0)
		{	// Kolejny numer w trakcie roku
			$nr  = ($ilosc_spoka === 0 ) ? 1 : $ilosc_spoka + 1;
		}
		else
		{	// Nowy numer od początku roku
			$nr = 1;
		}
		
		$table_przenies->nr_przeniesienia = $nr.'/'.$skrot_sp.'/'.$biezacyRok;  
		$this->nr_przeniesienia = $table_przenies->nr_przeniesienia;
		
		/*
		 * E-mail do wydajacego maszynę
		 */
		 require_once('email.php');
$table_przenies->whoWydalEmail = 'mariusz.kukulski@mega-service.pl';
		$email = new msEmail();
		if ( JError::isError($email->emailPrzeniesienie( $table_przenies, 0 ) ) )  {
			return false;
		}		
		
		
		// Dodaj rekord przeniesienia
		if ( ! $table_przenies->store() ) {
			$this->setError( $table_przenies->getError() );
			return false;
		}

		/* 
		 * Przeniesienie_staus
		 */
		// Utworz obiekt tablicy
		$table_stat =& $this->getTable('Przeniesienie_status');
		// Pobiez z ob. przeniesienia_add wlasciwosci do ob. tablicy
		$table_stat->bind( $this->getProperties() );			

		// Ustawienie identyfikatora grupy. 
		// Jeśli nowy obiekt to zostanie stworzony nowy nr $gid.	
		$table_stat->gid = $this->setGid( $table_stat->_tbl ); 
		
		$table_stat->status = 0;
		
		// Dodaj rekord przeniesienia
		if ( ! $table_stat->store() ) {
			$this->setError( $table_stat->getError() );
			return false;
		}		 
		
		return true;
	}
	
}
